package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.sun.org.apache.xpath.internal.operations.Or;

import to.Curso;
import to.Docente;
import to.Questao;
import to.Turma;
import util.HibernateUtil;
import visao.QuestaoVO;

public class AvaliacaoDAO {

	public List<Questao> buscarTodasQuestao() {

		Session session = null;
		List<Questao> listaRetorno = new ArrayList<Questao>();

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Questao.class, "q");
			criteria.addOrder(Order.asc("q.tipo"));
			criteria.add(Restrictions.like("q.status", "%Ativa%"));
			criteria.add(Restrictions.like("q.tipoProva",
					"%Avaliacao Institucional%"));
			listaRetorno = (List<Questao>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaRetorno;
	}

	public Questao buscaQuestaoPorCodigo(Integer codigo) {

		Questao retornaQuestao = new Questao();
		Session session = null;

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Questao.class, "q");
			criteria.add(Restrictions.eq("q.id", codigo));
			retornaQuestao = (Questao) criteria.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return retornaQuestao;
	}

	public List<QuestaoVO> buscaQuestao() {

		StringBuilder sql = new StringBuilder();

		sql.append("select q.id, q.descricao, q.tipo from tbl_questao q where q.`status` = 'Ativa' ");

		List<QuestaoVO> listaRetorno = new ArrayList<QuestaoVO>();

		try {

			Connection conexao = HibernateUtil.getSessionFactory()
					.openSession().connection();

			PreparedStatement comando = conexao
					.prepareStatement(sql.toString());
			ResultSet resultado = comando.executeQuery();

			while (resultado.next()) {

				QuestaoVO questao = new QuestaoVO();

				questao.setIdQuestao(resultado.getInt("q.id"));
				questao.setDescricao(resultado.getObject("q.descricao"));
				questao.setTipo(resultado.getObject("q.tipo"));
				questao.setPeso(null);

				listaRetorno.add(questao);

			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaRetorno;
	}

	public Curso buscarCursoPorCodigo(Integer curso) {

		Session session = null;
		Curso retornaCurso = new Curso();

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Curso.class, "cur");
			criteria.add(Restrictions.eq("cur.id", curso));
			retornaCurso = (Curso) criteria.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return retornaCurso;
	}

	public List<Curso> buscarTodosCursos() {

		Session session = null;
		List<Curso> listaCurso = new ArrayList<Curso>();

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Curso.class, "cur");
			criteria.addOrder(Order.asc("cur.nome"));
			listaCurso = (List<Curso>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaCurso;
	}

	public List<Docente> buscaDocente() {

		Session session = null;
		List<Docente> listaDocente = new ArrayList<Docente>();

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Docente.class, "doc");
			criteria.addOrder(Order.asc("doc.nome"));
			listaDocente = (List<Docente>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaDocente;
	}

	public List<Turma> buscaTurmaPorDocente(Docente docente) {

		Session session = null;
		List<Turma> listaTurma = new ArrayList<Turma>();

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Turma.class, "tur");
			criteria.add(Restrictions.eq("tur.docente", docente));
			criteria.addOrder(Order.asc("tur.descricao"));
			listaTurma = (List<Turma>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaTurma;
	}

}
